package uva.sc.ql.gui.questions;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import uva.sc.ql.atom.ID;
import uva.sc.ql.evaluator.QuestionsPropertiesVisitor;
import uva.sc.ql.gui.helpers.QuestionData;
import uva.sc.ql.gui.listeners.CalculatorListener;
@SuppressWarnings({ "serial" })
public class TextBoxQuestion extends Question {
private Map<ID, List<ID>> patronElements;
private QuestionsPropertiesVisitor questionsProperties;
private List<Component> componentList;
public TextBoxQuestion(Map<ID, List<ID>> patronElements,
QuestionsPropertiesVisitor questionsProperties,
List<Component> componentList) {
this.patronElements = patronElements;
this.questionsProperties = questionsProperties;
this.componentList = componentList;
}
public JPanel drawQuestion(ID id, String label, boolean isEditable) {
QuestionData data = questionsProperties.questionData(id);
boolean visibility = data.evaluateVisibility(questionsProperties
.getValuesTable());
JTextField textField = createTextField(id);
return generatePanel(id, label, visibility, textField);
}
private JPanel generatePanel(ID id, String label, boolean visibility,
JTextField textField) {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 0));
panel.add(new JLabel(label));
panel.add(Box.createRigidArea(new Dimension(0, 5)));
panel.add(textField);
panel.setName(id.getValue());
panel.setVisible(visibility);
return panel;
}
private JTextField createTextField(ID id) {
JTextField textField = new JTextField();
textField.setName(id.getValue());
addListeners(id, textField);
return textField;
}
private void addListeners(ID id, JTextField textField) {
for (Entry<ID, List<ID>> entry : patronElements.entrySet()) {
addListener(id, textField, entry);
}
}
private void addListener(ID id, JTextField textField,
Entry<ID, List<ID>> entry) {
if (id.equals(entry.getKey())) {
textField.getDocument()
.addDocumentListener(
(new CalculatorListener(patronElements,
questionsProperties, componentList,
textField, id)));
}
}
}